﻿using SharpArch.Core.DomainModel;
using SharpArch.Core.PersistenceSupport;
using NHibernate.Validator.Constraints;
using SharpArch.Core;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
using System.Collections.Generic;

namespace zeus.Core
{
    public class PlanCliente : Entity
    {
        public PlanCliente()
        {
            PlanesDisponibles = new List<PlanDisponible>();
            Eventos = new List<PlanEvento>();
        }

        public virtual Planes Planes { get; set; }

        public virtual Cliente Cliente { get; set; }

        public virtual int CodigoCliente { get; set; }

        public virtual int CodigoPlan { get; set; }

        [DisplayName("Nombre")]
        [Required(ErrorMessage = "Ingrese el Nombre del Plan")]
        public virtual string Nombre { get; set; }

        [DisplayName("Reporte")]
        public virtual int? CodigoPeridiocidad { get; set; }

        [DisplayName("Intervalo")]
        public virtual int? CodigoIntervalo { get; set; }

        [DisplayName("Activo")]
        public virtual bool Activo { get; set; }

        [DisplayName("Resumen")]
        public virtual bool Resumen { get; set; }

        [DisplayName("Límite de velocidad")]
        public virtual int Velocidad { get; set; }

        [DisplayName("Número de celular")]
        public virtual string Celular { get; set; }

        [DisplayName("Correo electrónico")]
        [RegularExpression("^[a-zA-Z][\\w\\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]\\.[a-zA-Z][a-zA-Z\\.]*[a-zA-Z]$", ErrorMessage="Ingrese un mail válido")]
        public virtual string Mail { get; set; }

        [DisplayName("Condición")]
        public virtual int Condicion { get; set; }

        public virtual IList<PlanDisponible> PlanesDisponibles { get; set; }

        public virtual IList<PlanEvento> Eventos { get; set; }

        // Helpers
        public virtual string UsuariosHidden { get; set; }

        public virtual void AddUsuario(PlanDisponible planDisponible)
        {
            if (planDisponible.PlanCliente != null)
                planDisponible.PlanCliente.PlanesDisponibles.Remove(planDisponible);

            planDisponible.PlanCliente = this;
            PlanesDisponibles.Add(planDisponible);
        }
    }
}
